#ifndef __FACE_H__
#define __FACE_H__

#include "half_edge.h"
#include "point.h"
#include "bezier_surface.h"
#include <vector>

class Solid;

class Face{
    public:
        Face(unsigned int);
        Face(unsigned int, Solid *, Loop*);
        ~Face();

        void setSolid(Solid *);
        void setLoop(Loop *);
        void setBezier(int, double);
        void resetBezier();

        unsigned int getID();
        Solid *getSolid();
        Loop *getLoop();
        BezierSurface * getBezier();

        double *getNormalVector();
        Point getNormal();

        Point getBoundingBoxCenter(std::vector<Vertex *>);
        void scale(double);
        void translate(Point);

        double area();

        void select(bool);
        bool isSelected();
        bool isBezier();

    private:
        unsigned int id;
        Solid* solid;
        Loop* loop;
        bool selected;
        BezierSurface *bezier;
};

#endif
